﻿// Helical.cpp: 实现文件
//

#include "pch.h"
#include "afxdialogex.h"
#include "Helical.h"
#include "Data.h"
#include "liwishell.h"
#include "LiWi.h"


// Helical 对话框

IMPLEMENT_DYNAMIC(Helical, CDialogEx)

Helical::Helical(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_Helical, pParent)
{

}

Helical::~Helical()
{
}

void Helical::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(Helical, CDialogEx)
	ON_BN_CLICKED(IDC_Start, &Helical::OnBnClickedButton1)
END_MESSAGE_MAP()



//启动
void Helical::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//获取参数
	CString speed, accel, decel, endPoint0, endPoint1, endPoint2, midPoint0, midPoint1, midPoint2, firstRad, secendRad, num;
	int radio			//方向
		, openCount;	//运动计算
	//获取界面参数
	GetDlgItem(IDC_Speed_4)->GetWindowTextW(speed);
	GetDlgItem(IDC_Accel_4)->GetWindowTextW(accel);
	GetDlgItem(IDC_Decel_4)->GetWindowTextW(decel);

	GetDlgItem(IDC_EndPoint0)->GetWindowTextW(endPoint0);
	GetDlgItem(IDC_EndPoint1)->GetWindowTextW(endPoint1);
	GetDlgItem(IDC_EndPoint2)->GetWindowTextW(endPoint2);
	GetDlgItem(IDC_MidPoint0)->GetWindowTextW(midPoint0);
	GetDlgItem(IDC_MidPoint1)->GetWindowTextW(midPoint1);

	GetDlgItem(IDC_FirstRad)->GetWindowTextW(firstRad);
	GetDlgItem(IDC_SecendRad)->GetWindowTextW(secendRad);
	GetDlgItem(IDC_Num)->GetWindowTextW(num);

	radio = ((CButton*)GetDlgItem(IDC_RADIO0))->GetCheck() ? 0 : 1;
	openCount = ((CButton*)GetDlgItem(IDC_OpenCount))->GetCheck() ? 0 : 1;
	//设置轴参数
	PMC_Base(Data::handle, 4, Data::axisList);
	for (size_t i = 0; i < 4; i++)
	{
		int enable = 0;
		PMC_GetAxisEnable(Data::handle, i, &enable);
		if (enable == 0)
		{
			MessageBox(TEXT("请检查轴0-2使能情况"));
			return;
		}
		PMC_SetAtype(Data::handle, i, 1);
		PMC_SetUnits(Data::handle, i, 100);
		PMC_SetSpeed(Data::handle, i, _ttof(speed));
		PMC_SetAccel(Data::handle, i, _ttof(accel));
		PMC_SetDecel(Data::handle, i, _ttof(decel));
	}
	if (((CButton*)GetDlgItem(IDC_Mode0))->GetCheck())
	{
		//圆心螺旋插补    (句柄，轴数，轴列表，第一轴运动坐标，第二轴运动坐标，第一轴圆心，第二轴圆心，顺逆，第三轴运动距离，速度计算)
		if (((CButton*)GetDlgItem(IDC_Type0))->GetCheck()) PMC_MHelicalAbs(Data::handle, 3, Data::axisList, _ttof(endPoint0), _ttof(endPoint1), _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(endPoint2), openCount);
		//3点画螺旋插补       (句柄，轴数，轴列表，第一轴中点，第二轴中点，第一轴结束，第二轴结束，第三轴运动距离，速度计算)
		else if (((CButton*)GetDlgItem(IDC_Type1))->GetCheck()) PMC_MHelical2Abs(Data::handle, 3, Data::axisList, _ttof(midPoint0), _ttof(midPoint1), _ttof(endPoint0), _ttof(endPoint1), _ttof(endPoint2), openCount);
		//椭圆+螺旋插补       (句柄，轴数，轴列表，第一轴终点，第二轴终点，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，第三轴移动距离)
		else if (((CButton*)GetDlgItem(IDC_Type2))->GetCheck()) PMC_MEclipseHelicalAbs(Data::handle, 3, Data::axisList, _ttof(endPoint0), _ttof(endPoint1), _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(firstRad), _ttof(secendRad), _ttof(endPoint2));
		//椭圆+螺旋多圈插补     (句柄，轴数，轴列表，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，圈数，第三轴运动距离，第三轴速度计算)
		else  PMC_TangleAbs(Data::handle, 3, Data::axisList, _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(firstRad), _ttof(secendRad), _ttof(num), _ttof(endPoint2), openCount);

	}
	else
	{
		//圆心螺旋插补    (句柄，轴数，轴列表，第一轴运动坐标，第二轴运动坐标，第一轴圆心，第二轴圆心，顺逆，第三轴运动距离，速度计算)
		if (((CButton*)GetDlgItem(IDC_Type0))->GetCheck()) PMC_MHelical(Data::handle, 3, Data::axisList, _ttof(endPoint0), _ttof(endPoint1), _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(endPoint2), openCount);
		//3点画螺旋插补       (句柄，轴数，轴列表，第一轴中点，第二轴中点，第一轴结束，第二轴结束，第三轴运动距离，速度计算)
		else if (((CButton*)GetDlgItem(IDC_Type1))->GetCheck()) PMC_MHelical2(Data::handle, 3, Data::axisList, _ttof(midPoint0), _ttof(midPoint1), _ttof(endPoint0), _ttof(endPoint1), _ttof(endPoint2), openCount);
		//椭圆+螺旋插补       (句柄，轴数，轴列表，第一轴终点，第二轴终点，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，第三轴移动距离)
		else if (((CButton*)GetDlgItem(IDC_Type2))->GetCheck()) PMC_MEclipseHelical(Data::handle, 3, Data::axisList, _ttof(endPoint0), _ttof(endPoint1), _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(firstRad), _ttof(secendRad), _ttof(endPoint2));
		//椭圆+螺旋多圈插补     (句柄，轴数，轴列表，第一轴中心，第二轴中心，顺逆，第一轴椭圆半径，第二轴椭圆半径，圈数，第三轴运动距离，第三轴速度计算)
		else  PMC_Tangle(Data::handle, 3, Data::axisList, _ttof(midPoint0), _ttof(midPoint1), radio, _ttof(firstRad), _ttof(secendRad), _ttof(num), _ttof(endPoint2), openCount);

	}
}


BOOL Helical::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化

	GetDlgItem(IDC_Speed_4)->SetWindowTextW(_T("100"));
	GetDlgItem(IDC_Accel_4)->SetWindowTextW(_T("1000"));
	GetDlgItem(IDC_Decel_4)->SetWindowTextW(_T("1000"));
	GetDlgItem(IDC_EndPoint0)->SetWindowTextW(_T("100"));
	GetDlgItem(IDC_EndPoint1)->SetWindowTextW(_T("100"));
	GetDlgItem(IDC_EndPoint2)->SetWindowTextW(_T("100"));
	GetDlgItem(IDC_MidPoint0)->SetWindowTextW(_T("50"));
	GetDlgItem(IDC_MidPoint1)->SetWindowTextW(_T("50"));
	GetDlgItem(IDC_FirstRad)->SetWindowTextW(_T("50"));
	GetDlgItem(IDC_SecendRad)->SetWindowTextW(_T("50"));
	GetDlgItem(IDC_Num)->SetWindowTextW(_T("100"));
	((CButton*)GetDlgItem(IDC_Mode0))->SetCheck(true);
	((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(true);
	((CButton*)GetDlgItem(IDC_Type0))->SetCheck(true);
	((CButton*)GetDlgItem(IDC_OpenCount))->SetCheck(true);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}
